package br.com.dallas.vendas.manager;

import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpSession;

import org.primefaces.model.chart.PieChartModel;

import br.com.dallas.util.exception.ClasseNaoEncontradaException;
import br.com.dallas.util.exception.ConexaoException;
import br.com.dallas.util.exception.ListaVaziaException;
import br.com.dallas.util.exception.ListarObjetoException;
import br.com.dallas.util.periodo.ProcessamentoData;
import br.com.dallas.vendas.controller.VendaController;
import br.com.dallas.vendas.javabean.VendaBean;

@ManagedBean(name="managementCarriesBean")
@ViewScoped
public class ManagementCarriesBean implements Serializable
{
	private static final long serialVersionUID = 1L;
	private Map<String, Integer> anos;
	private Map<String, Integer> meses;
	private int mes;
	private int ano;
	private List<VendaBean> listaVolumesPorTransportadora;
	private VendaBean vendaBean;
	private PieChartModel pieChartModel = new PieChartModel();
	private SelectItem[] selecaoTransportador;
	
	public Map<String, Integer> getAnos()
	{
		if (anos == null)
			anos = ProcessamentoData.getAnos();
		
		return anos;
	}
	
	public Map<String, Integer> getMeses()
	{
		if (meses == null)
			meses = ProcessamentoData.getMeses();
		
		return meses;
	}
	
	public int getMes()
	{
		return mes;
	}
	
	public int getAno()
	{
		return ano;
	}
	
	public void setMes(int mes)
	{
		this.mes = mes;
	}

	public void setAno(int ano)
	{
		this.ano = ano;
	}

	public List<VendaBean> getListaVolumesPorTransportadora()
	{
		return listaVolumesPorTransportadora;
	}

	public VendaBean getVendaBean()
	{
		return vendaBean;
	}
	
	public PieChartModel getPieChartModel()
	{	
		return pieChartModel;
	}

	public void carregarDadosTela()
	{
		VendaController vendaController = null;
		try
		{	
			if (vendaBean == null)
				vendaBean = new VendaBean();
			
			vendaBean.setDataInicial(ProcessamentoData.getDataInicialMes(mes, ano));
			vendaBean.setDataFinal(ProcessamentoData.getDataFinalMes(mes, ano));
			
			
			if (listaVolumesPorTransportadora == null)
				listaVolumesPorTransportadora = new ArrayList<VendaBean>();
			
			vendaController = new VendaController();
			
			vendaController.carregarTransportadoras(listaVolumesPorTransportadora, vendaBean);
			
			pieChartModel = new PieChartModel();
			selecaoTransportador = new SelectItem[listaVolumesPorTransportadora.size() + 1];
			
			vendaController.carregarGrafico(listaVolumesPorTransportadora, pieChartModel, selecaoTransportador);
		}
		catch(ListarObjetoException e)
		{
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(e.getMessage()));
		}
		catch (ConexaoException e)
		{
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(e.getMessage()));
		}
		catch (ClasseNaoEncontradaException e)
		{
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(e.getMessage()));
		}
		catch (ListaVaziaException e)
		{
			try
			{
				FacesContext.getCurrentInstance().getExternalContext().redirect(FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath() + "/view/dispatcher/ListaVazia.jsf");
			}
			catch (IOException e1)
			{
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(e.getMessage()));
			}
		}
		finally
		{
			if (vendaController != null)
			{
				vendaController.close();
				vendaController = null;
			}
		}
	}
	
	public void imprimir()
	{
		String caminho = "";
		HttpSession session = null;
		try
		{	
			if (this.listaVolumesPorTransportadora != null && !this.listaVolumesPorTransportadora.isEmpty())
			{	
				session =  (HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
				session.setAttribute("lista", this.listaVolumesPorTransportadora);
				caminho = "/processaRequisicao?req=1";
				FacesContext.getCurrentInstance().getExternalContext().redirect(FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath() + caminho);
			}
		}
		catch(IOException e)
		{
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(e.getMessage()));
		}
	}
}
